<?php

namespace App\Http\Middleware;

use App\Services\admin\MenuService;
use App\Services\admin\RoleService;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * 登录验证中间件
 */
class VerifyLogin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        if (! $request->session()->has(config('amis.cache.login_user'))) {
            return $request->expectsJson() ? @null : redirect(config('amis.tpl.admin_login_page'));
        }
        $user = $request->session()->get(config('amis.cache.login_user'));
        $user = json_decode($user, true);

        // 菜单
        $roleInfo = RoleService::infoById($user['roles'], $user['super_admin']);

        // 根据链接获取当前访问组件信息
        $action = $request->route('action');
        if ($action) {
            $menuInfo = MenuService::infoByUrl($action.'/view');
        }

        //合并参数
        $request->merge([
            'global' => [
                'user' => $user,
                'setting' => baseVar(),
                'menu' => $roleInfo,
                'menu_label' => isset($action) ? $menuInfo->label : '',
                'menu_code' => isset($action) ? $action : '',
            ],
        ]);

        return $next($request);
    }

    //    /**
    //     * 后置操作
    //     * @param $request
    //     * @param $response
    //     * @return void
    //     */
    //    public function terminate($request, $response)
    //    {
    //        if (isset($request->global['menu_label']) && isset($request->global['menu_code']) && $response->getStatusCode() === 200) {
    //            $data = json_decode($response->getContent(), true);
    //            if (isset($data['status']) && $data['status'] === 0) {
    //                // 保存日志
    //                $method = $request->method();
    //
    //                $param = $request->all();
    //                unset($param->global);
    //
    //                switch ($method) {
    //                    case 'GET':
    //                        // 查询
    //                        break;
    //                    case 'POST':
    //                        if (isset($param['id'])) {
    //                            // 编辑
    //                            OperationLogService::create([
    //                                'method' => '编辑',
    //                                'title' => $request->global['menu_label'],
    //                                'uid' => $request->global['user']['id'],
    //                                'path' => $request->fullUrl(),
    //                                'ip' => $request->ip(),
    //                                'ua' => $request->header('User-Agent'),
    //                                'param' => json_encode($param),
    //                                'function' => config('amis.tpl.admin_login_page') . '/api/' . $request->global['menu_code'],
    //                                'desc' => 'id=' . $data['data'],
    //                            ]);
    //                        } else {
    //                            // 创建
    //                            OperationLogService::create([
    //                                'method' => '创建',
    //                                'title' => $request->global['menu_label'],
    //                                'uid' => $request->global['user']['id'],
    //                                'path' => $request->fullUrl(),
    //                                'ip' => $request->ip(),
    //                                'ua' => $request->header('User-Agent'),
    //                                'param' => json_encode($param),
    //                                'function' => config('amis.tpl.admin_login_page') . '/api/' . $request->global['menu_code'],
    //                                'desc' => isset($data['data']) ? 'id=' . $data['data'] : '',
    //                            ]);
    //                        }
    //                        break;
    //                    case 'PUT':
    //                    case 'PATCH':
    //                        break;
    //                    case 'DELETE':
    //                        // 删除
    //                        OperationLogService::create([
    //                            'method' => '删除',
    //                            'title' => $request->global['menu_label'],
    //                            'uid' => $request->global['user']['id'],
    //                            'path' => $request->fullUrl(),
    //                            'ip' => $request->ip(),
    //                            'ua' => $request->header('User-Agent'),
    //                            'param' => json_encode($param),
    //                            'function' => config('amis.tpl.admin_login_page') . '/api/' . $request->global['menu_code'],
    //                            'desc' => 'id=' . $data['data'],
    //                        ]);
    //                        break;
    //                }
    //            }
    //        }
    //    }
}
